﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 铸造温度处理2
{
    public partial class Editer : UserControl
    {
        public Editer()
        {
            InitializeComponent();
        }
        private void UnprotectWorksheet()
        {
            try
            {
                Microsoft.Office.Interop.Excel.Worksheet activeSheet =
                    Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                if (activeSheet == null)
                {
                    MessageBox.Show("没有活动的工作表！");
                    return;
                }
                activeSheet.Unprotect(); // 无密码时直接调用
                                         // activeSheet.Unprotect("yourpassword"); // 如果保护时有密码
                // 2. 可选：解锁所有单元格（确保所有单元格可编辑）
                activeSheet.Cells.Locked = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"解锁失败: {ex.Message}");
            }
        }
        private void ProtectHeaderRow()
        {
            try
            {
                Microsoft.Office.Interop.Excel.Worksheet activeSheet =
                    Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                if (activeSheet == null)
                {
                    MessageBox.Show("没有活动的工作表！");
                    return;
                }
                activeSheet.Cells.Locked = false;
                Microsoft.Office.Interop.Excel.Range headerRow = activeSheet.Rows[1];
                headerRow.Locked = true;
                activeSheet.Protect(
                    Password: Type.Missing,                // 不设置密码
                    AllowFormattingCells: true,            // 允许格式化单元格
                    AllowSorting: true,                    // 允许排序
                    AllowFiltering: true                   // 允许筛选
                );
            }
            catch (Exception ex)
            {
                MessageBox.Show($"出错: {ex.Message}");
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                UnprotectWorksheet();
                // 1. 获取当前活动的 Excel 工作表
                Microsoft.Office.Interop.Excel.Worksheet activeSheet =
                    Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

                if (activeSheet == null)
                {
                    MessageBox.Show("没有活动的工作表！");
                    return;
                }
                // 2. 清空当前工作表的所有数据（保留格式）
                ClearWorksheet(activeSheet);
                // 3. 假设你有一个 DataTable（这里用示例数据）
                DataTable dataTable = GetSampleDataTable();

                // 4. 将 DataTable 写入工作表
                WriteDataTableToWorksheet(dataTable, activeSheet);
                ProtectHeaderRow();
                MessageBox.Show("数据已成功写入当前工作表！");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"出错: {ex.Message}");
            }
        }

        // 清空工作表数据（保留格式）
        private void ClearWorksheet(Microsoft.Office.Interop.Excel.Worksheet worksheet)
        {
            // 清除所有单元格的值和公式（保留格式）
            worksheet.Cells.ClearContents();

            // 如果需要清除格式，可以用：
            // worksheet.Cells.Clear();
        }

        // 生成示例 DataTable（替换为你的实际数据）
        private DataTable GetSampleDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Age", typeof(int));

            dt.Rows.Add(1, "张三", 25);
            dt.Rows.Add(2, "李四", 30);
            dt.Rows.Add(3, "王五", 28);

            return dt;
        }

        // 将 DataTable 写入工作表
        private void WriteDataTableToWorksheet(DataTable dataTable, Microsoft.Office.Interop.Excel.Worksheet worksheet)
        {
            // 写入列名（标题行）
            for (int col = 0; col < dataTable.Columns.Count; col++)
            {
                worksheet.Cells[1, col + 1] = dataTable.Columns[col].ColumnName;
            }

            // 写入数据行
            for (int row = 0; row < dataTable.Rows.Count; row++)
            {
                for (int col = 0; col < dataTable.Columns.Count; col++)
                {
                    worksheet.Cells[row + 2, col + 1] = dataTable.Rows[row][col];
                }
            }

            // 可选：自动调整列宽
            worksheet.Columns.AutoFit();
        }
        /// <summary>
        /// 解析类容并上传
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                // 1. 获取当前活动的 Excel 工作表
                Microsoft.Office.Interop.Excel.Worksheet activeSheet =
                    Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

                if (activeSheet == null)
                {
                    MessageBox.Show("没有活动的工作表！");
                    return;
                }

                // 2. 将工作表数据转换为 DataTable
                DataTable dataTable = ConvertWorksheetToDataTable(activeSheet);

                MessageBox.Show("数据已成功从工作表读取到 DataTable！");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"出错: {ex.Message}");
            }
        }

        // 将 Excel 工作表数据转换为 DataTable
        private DataTable ConvertWorksheetToDataTable(Microsoft.Office.Interop.Excel.Worksheet worksheet)
        {
            DataTable dataTable = new DataTable();

            // 获取已使用的数据范围
            Microsoft.Office.Interop.Excel.Range usedRange = worksheet.UsedRange;

            // 读取数据到二维数组（提升性能）
            object[,] dataArray = (object[,])usedRange.Value;

            // 第一行为列名
            int rowCount = dataArray.GetLength(0);
            int colCount = dataArray.GetLength(1);

            // 添加列（假设第一行是列名）
            for (int col = 1; col <= colCount; col++)
            {
                string columnName = dataArray[1, col]?.ToString() ?? $"Column{col}";
                dataTable.Columns.Add(columnName);
            }

            // 添加数据行（从第二行开始）
            for (int row = 2; row <= rowCount; row++)
            {
                DataRow dataRow = dataTable.NewRow();
                for (int col = 1; col <= colCount; col++)
                {
                    dataRow[col - 1] = dataArray[row, col]?.ToString() ?? string.Empty;
                }
                dataTable.Rows.Add(dataRow);
            }

            return dataTable;
        }
    }
}
